home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 9 / Night Owl CD-ROM (NOPV9) (Night Owl Publisher) (1993).ISO / 006a / rgstruct.zip / RECORDS.PAS
Pascal/Delphi Source File  |  1993-04-01  |  39KB  |  824 lines

  1. const
  2.   ver='04-01 Beta';
  3.   maxprotocols=120;
  4.   maxevents=10;
  5.   maxarcs=8;
  6.   maxbatchfiles=50;
  7.   maxmenucmds=100;
  8.  
  9. TYPE
  10.   astr=string[160];
  11.   str8=string[8];
  12.  
  13.   acstring=string[20];            { Access Condition String }
  14.   acrq='@'..'Z';                  { Access Restriction flags }
  15.  
  16.   uflags =
  17.    (rlogon,                       { L - Limited to one call a day }
  18.     rchat,                        { C - No SysOp paging }
  19.     rvalidate,                    { V - Posts are unvalidated }
  20.     ruserlist,                    { U - Can't list users }
  21.     ramsg,                        { A - Can't post an auto message }
  22.     rpostan,                      { * - Can't post anonymously }
  23.     rpost,                        { P - Can't post }
  24.     remail,                       { E - Can't send email }
  25.     rvoting,                      { K - Can't use voting booth }
  26.     rmsg,                         { M - Force email deletion }
  27.     vt100,                        { Supports VT100 }
  28.     hotkey,                       { hotkey input mode }
  29.     avatar,                       { Supports Avatar }
  30.     pause,                        { screen pausing }
  31.     novice,                       { user requires novice help }
  32.     ansi,                         { Supports ANSI }
  33.     color,                        { Supports color }
  34.     alert,                        { Alert SysOp upon login }
  35.     smw,                          { Short message(s) waiting }
  36.     nomail,                       { Mailbox is closed }
  37.     fnodlratio,                   { 1 - No UL/DL ratio }
  38.     fnopostratio,                 { 2 - No post/call ratio }
  39.     fnofilepts,                   { 3 - No file points checking }
  40.     fnodeletion);                 { 4 - Protected from deletion }
  41.  
  42.   suflags =
  43.     (lockedout,                   { if locked out }
  44.     deleted,                      { if deleted }
  45.     trapactivity,                 { if trapping users activity }
  46.     trapseparate,                 { if trap to seperate TRAP file }
  47.     chatauto,                     { if auto chat trapping }
  48.     chatseparate,                 { if separate chat file to trap to }
  49.     slogseparate,                 { if separate SysOp log }
  50.     clsmsg,                       { if clear-screens }
  51.     RIP,                          { if RIP graphics can be used }
  52.     fseditor                      { if Full Screen Editor }
  53.   );
  54.  
  55.   anontyp =
  56.    (atno,                         { Anonymous posts not allowed }
  57.     atyes,                        { Anonymous posts are allowed }
  58.     atforced,                     { Force anonymous }
  59.     atdearabby,                   { "Dear Abby" base }
  60.     atanyname);                   { Post under any name }
  61.  
  62.   netattr=
  63.     (Private,
  64.      Crash,
  65.      Recd,
  66.      NSent,
  67.      FileAttach,
  68.      Intransit,
  69.      Orphan,
  70.      KillSent,
  71.      Local,
  72.      Hold,
  73.      Unused,
  74.      FileRequest,
  75.      ReturnReceiptRequest,
  76.      IsReturnReceipt,
  77.      AuditRequest,
  78.      FileUpdateRequest);
  79.  
  80.   NetAttribs = set of netattr;
  81.  
  82.   colors   = array[FALSE..TRUE,0..9] of byte; { Color tables }
  83.   secrange = array[0..255] of integer;        { Access tables }
  84.  
  85.   mzscanr  = set of 1..250;              { Which message bases to scan }
  86.   fzscanr  = set of 1..250;             { Which file bases to scan }
  87.   mhireadr = array[1..250] of longint;   { Lastread pointers }
  88.  
  89.   useridxrec=                         { USERS.IDX : Sorted names listing }
  90.   record
  91.     Name:string[36];                  { name (real OR handle)}
  92.     Number:integer;                   { user number          }
  93.     RealName:boolean;                 { User's real name?    }
  94.     Deleted:boolean;                  { deleted or not       }
  95.     Left:integer;                     { record or -1         }
  96.     Right:integer;                    { record or -1         }
  97.   end;
  98.  
  99.   userrec=                            { USERS.DAT : User records }
  100.   record
  101.     name:string[36];                  { system name      }
  102.     realname:string[36];              { real name        }
  103.     pw:string[20];                    { password         }
  104.     ph:string[12];                    { phone #          }
  105.     bday:string[8];                   { birthdate        }
  106.     firston:string[8];                { first on date    }
  107.     laston:string[8];                 { last on date     }
  108.     street:string[30];                { street address   }
  109.     citystate:string[30];             { city, state      }
  110.     zipcode:string[10];               { zipcode          }
  111.     usrdefstr:array[1..3] of string[35]; { type of computer }
  112.                                       { occupation       }
  113.                                       { BBS reference    }
  114.     note:string[35];                  { SysOp note       }
  115.     userstartmenu:string[8];          { menu to start at }
  116.     lockedfile:string[8];             { print lockout msg}
  117.     flags:set of uflags;              { flags            }
  118.     sflags:set of suflags;            { status flags     }
  119.     ar:set of acrq;                   { AR flags         }
  120.     vote:array[1..25] of byte;        { voting data      }
  121.  
  122.     sex:char;                         { gender           }
  123.     ttimeon,                          { total time on    }
  124.     uk,                               { UL k             }
  125.     dk:longint;                       { DL k             }
  126.     tltoday,                          { # min left today }
  127.     forusr,                           { forward mail to  }
  128.     filepoints:integer;               { # of file points }
  129.  
  130.     uploads,downloads,                { # of ULs/# of DLs}
  131.     loggedon,                         { # times on       }
  132.     msgpost,                          { # message posts  }
  133.     emailsent,                        { # email sent     }
  134.     feedback,                         { # feedback sent  }
  135.     timebank,                         { # mins in bank   }
  136.     timebankadd,                      { # added today    }
  137.     dlktoday,                         { # kbytes dl today}
  138.     dltoday:word;                     { # files dl today }
  139.  
  140.     waiting,                          { mail waiting     }
  141.     linelen,                          { line length      }
  142.     pagelen,                          { page length      }
  143.     ontoday,                          { # times on today }
  144.     illegal,                          { # illegal logons }
  145.     barf,
  146.     lastmbase,                        { # last msg base  }
  147.     lastfbase,                        { # last file base }
  148.     sl,dsl:byte;                      { SL / DSL         }
  149.  
  150.     mhiread:mhireadr;                 { Message last read date ptrs}
  151.     mzscan:mzscanr;                   { Which message bases to scan}
  152.     fzscan:fzscanr;                   { Which file bases to scan}
  153.  
  154.     cols:colors;                      { user colors }
  155.  
  156.     garbage:byte;
  157.     timebankwith:word;                { amount of time withdrawn today}
  158.     passwordchanged:word;             { last day password changed }
  159.     defarctype:byte;                  { default QWK archive type }
  160.     lastconf:char;                    { last conference they were in }
  161.     lastqwk:longint;                  { date/time of last qwk packet }
  162.     getownqwk:boolean;                { add own messages to qwk packet? }
  163.     scanfilesqwk:boolean;             { scan file bases for qwk packets? }
  164.     privateqwk:boolean;               { get private mail in qwk packets? }
  165.  
  166.     credit:longint;                   { Amount of credit a user has }
  167.     debit:longint;                    { Amount of debit a user has }
  168.     expiration:longint;               { Expiration date of this user }
  169.     expireto:char;                    { Subscription level to expire to }
  170.     ColorScheme:byte;                 { User's color scheme # }
  171.  
  172.     res:array[1..2] of byte;         { RESERVED }
  173.   end;
  174.  
  175.   msgstatusr=
  176.     (mdeleted,
  177.      sent,
  178.      unvalidated,
  179.      permanent,
  180.      allowmci,
  181.      netmail,
  182.      prvt,
  183.      forwarded);
  184.  
  185.   mhireadrec=
  186.   record
  187.     NewScan:boolean;           { New scan this base? }
  188.     LastRead:longint;          { Last message date read }
  189.   end;
  190.  
  191.   fromtoinfo=                  { from/to information for mheaderrec }
  192.   record
  193.     anon:byte;
  194.     usernum:word;              { user number   }
  195.     as:string[36];             { posted as     }
  196.     real:string[36];           { real name     }
  197.     name:string[36];           { system name   }
  198.     zone,
  199.     net,
  200.     node,
  201.     point:word;
  202.   end;
  203.  
  204.   mheaderrec=
  205.   record
  206.      from,mto:fromtoinfo;            { message from/to info    }
  207.      pointer:longint;                { starting record of text }
  208.      textsize:word;                  { size of text            }
  209.      replyto:word;                   { message it's a reply to }
  210.      date:longint;                   { date/time packed string }
  211.      dayofweek:byte;                 { message day of week     }
  212.      status:set of msgstatusr;       { message status flags    }
  213.      replies:word;                   { times replied to        }
  214.      subject:string[40];             { subject of message      }
  215.      origindate:string[19];          { date of echo/group msgs }
  216.      fileattached:byte;              { 0=No, 1=Yes&Del, 2=Yes&Save }
  217.      netattribute:NetAttribs;        { Netmail attributes }
  218.      res:array[1..2] of byte;        { reserved }
  219.   end;
  220.  
  221.  
  222.   historyrec=                     { HISTORY.DAT : Summary logs }
  223.   record
  224.     date:string[8];
  225.     userbaud:array[0..4] of word;
  226.     active,callers,newusers,posts,email,feedback,
  227.     errors,uploads,downloads:word;
  228.     uk,dk:longint;
  229.   end;
  230.  
  231.   filearcinforec=                 { Archive configuration records }
  232.   record
  233.     active:boolean;               { active or not  }
  234.     ext:string[3];                { file extension }
  235.     listline,                     { /x for internal;
  236.                                      x: 1=ZIP, 2=ARC/PAK, 3=ZOO, 4=LZH }
  237.     arcline,                      { compression cmdline    }
  238.     unarcline,                    { de-compression cmdline }
  239.     testline,                     { integrity test cmdline }
  240.     cmtline:string[25];           { comment cmdline        }
  241.     succlevel:integer;            { success ERRORLEVEL, -1=ignore results }
  242.   end;
  243.  
  244.   fstringrec=                     { STRING.DAT }
  245.   record
  246.     anonymous:string[80];             { "[Anonymous]" string }
  247.     note:array[1..2] of string[80];   { Logon notes (L #1-2) }
  248.     lprompt:string[80];               { Logon prompt (L #3) }
  249.     echoc:char;                       { Echo char for PWs }
  250.     sysopin,                          { "SysOp In" (inside SysOp hours)}
  251.     sysopout,                         { "SysOp Out" }
  252.     engage,                           { "Engage Chat" }
  253.     endchat,                          { "End Chat" }
  254.     wait,                             { "SysOp Working" }
  255.     pause,                            { "Pause" }
  256.     entermsg1,                        { "Enter Message" line #1 }
  257.     entermsg2,                        { "Enter Message" line #2 }
  258.     newscan1,                         { "NewScan begin" }
  259.     newscan2,                         { "NewScan done" }
  260.     scanmessage,                      { Message scanning prompt }
  261.     automsgt:string[80];              { Auto-Message title }
  262.     autom:char;                       { Auto-Message border characters }
  263.  
  264.     shelldos1,                        { " >> SysOp shelling to DOS ..." }
  265.     shelldos2,                        { " ... thank you for waiting." }
  266.     chatcall1,                        { "Paging SysOp, please wait..." }
  267.     chatcall2,                        { ">>><*><<<" }
  268.     contscanq,                        { "Continue, Read msgs, Quit? " }
  269.     namenotfound,                     { "Name NOT found in user list." }
  270.     bulletinline,                     { Bulletin line }
  271.     protocolp,                        { "Protocol (?=List) :" }
  272.  
  273.     listline,                         { "List files - P to pause" }
  274.     newline,                          { "Search for new files -" }
  275.     searchline,                       { "Search all dirs for file mask" }
  276.     findline1,                        { "Search for descriptions... " }
  277.     findline2,                        { "Enter the string to search for.." }
  278.     downloadline,                     { "Download - " }
  279.     uploadline,                       { "Upload - " }
  280.     viewline,                         { "View interior files - " }
  281.     nofilepts,                        { "Insufficient file points." }
  282.     unbalance,                        { "Your UL/DL ratio is unbalanced" }
  283.  
  284.     pninfo,                           { "P to Pause, N for next dir" }
  285.     gfnline1,                         { "[Enter]=All files" }
  286.     gfnline2,                         { "File mask: " }
  287.     batchadd,                         { "File added to batch queue." }
  288.     addbatch,                         { "Batch download flagging - " }
  289.     readq,                            { "Begin reading at [1-54] (Q=Quit): " }
  290.     scanq,                            { "Begin scanning at [1-54] (Q=Quit): " }
  291.     default,                          { "Press [Enter] to use defaults" }
  292.     newscanall,                       { ")[ Newscan All ](" }
  293.     newscandone,                      { ")[ Newscan Done ](" }
  294.     chatreason:string[80];            { 'Give me a good reason to chat' }
  295.     quote_line:array[1..2] of string[80]; { Quoting so and so to so and so }
  296.     userdefques:array[1..3] of string[80];{ user defined question 1...3}
  297.     userdefed:array[1..3] of string[10];  { user def'd q, user editor strings}
  298.     continue:string[80];              { Continue? }
  299.   end;
  300.  
  301.   modemflags=         { MODEM.DAT status flags }
  302.   (
  303.     lockedport,       { COM port locked at constant rate }
  304.     xonxoff,          { XON/XOFF (software) flow control }
  305.     ctsrts            { CTS/RTS (hardware) flow control }
  306.   );
  307.  
  308. linerec=
  309.   record
  310.     waitbaud:word;                    { initialization baud }
  311.     comport:byte;                     { COM port number }
  312.     init:string[50];                  { init string }
  313.     answer:string[40];                { answer string }
  314.     hangup:string[40];                { hangup string }
  315.     offhook:string[40];               { phone off-hook string }
  316.     nocallinittime:word;              { reinit modem after x mins of inactivity }
  317.     lockedportbaud:word;              { locked baud rate }
  318.     mflags:set of modemflags;         { status flags }
  319.     nocarrier:byte;                   { NO CARRIER result code }
  320.     resultcode:array[1..2,0..14]      { CONNECT result codes }
  321.                  of byte;             { 300,1200,2400,4800,7200,9600,12000,14400,16800,19200,5 extra}
  322.     logonacs:acstring;                { acs string to logon this node }
  323.     doorpath:string[40];              { path to write door info files to }
  324.   end;
  325.  
  326.   validationrec = record
  327.     description:string[25];           { description }
  328.     newsl,                            { new SL }
  329.     newdsl:byte;                      { new DSL }
  330.     newar:set of acrq;                { new AR }
  331.     newac:set of uflags;              { new AC }
  332.     newfp:integer;                    { file points to add }
  333.     newcredit:longint;                { new credit (added) }
  334.     expiration:word;                  { days until expiration }
  335.     expireto:char;                    { validation level to expire to }
  336.     softar:boolean;                   { TRUE=AR added to current, else replaces }
  337.     softac:boolean;                   { TRUE=AC    "   "   "       "      "  }
  338.     newmenu:string[8];                { User start out menu }
  339.   end;
  340.  
  341. generalrec=
  342.   record
  343.     datapath:string[40];              { DATA path }
  344.     miscpath:string[40];              { MISC path }
  345.     menupath:string[40];              { MENU path }
  346.     logspath:string[40];              { LOGS path }
  347.     msgpath:string[40];               { MSGS path }
  348.     nodepath:string[40];              { NODE list path }
  349.     temppath:string[40];              { TEMP path }
  350.     protpath:string[40];              { PROT path }
  351.     arcspath:string[40];              { ARCS path }
  352.  
  353.     bbsname:string[40];               { BBS name }
  354.     bbsphone:string[12];              { BBS phone number }
  355.     sysopname:string[30];             { SysOp's name }
  356.  
  357.     lowtime,                          { SysOp begin minute (in minutes) }
  358.     hitime,                           { SysOp end time }
  359.     dllowtime,                        { normal downloading hours begin.. }
  360.     dlhitime,                         { ..and end }
  361.     minbaudlowtime,                   { minimum baud calling hours begin.. }
  362.     minbaudhitime,                    { ..and end }
  363.     minbauddllowtime,                 { minimum baud downloading hours begin.. }
  364.     minbauddlhitime:integer;          { ..and end }
  365.  
  366.     minimumbaud,                      { minimum baud rate to logon }
  367.     minimumdlbaud:longint;            { minimum baud rate to download }
  368.  
  369.     shuttlelog,                       { Use Shuttle Logon? }
  370.     closedsystem,                     { Allow new users? }
  371.     swapshell:boolean;                { Swap on shell? }
  372.  
  373.     sysoppw,                          { SysOp password }
  374.     newuserpw,                        { newuser password }
  375.     minbaudoverride,                  { override minimum baud rate }
  376.     shuttlepw:string[20];             { Shuttle password }
  377.  
  378.     crapola2:string[8];               { }
  379.  
  380.     sop,                              { SysOp }
  381.     csop,                             { Co-SysOp }
  382.     msop,                             { Message SysOp }
  383.     fsop,                             { File SysOp }
  384.     spw,                              { SysOp PW at logon }
  385.     seepw,                            { see SysOp PWs remotely  }
  386.     normpubpost,                      { make normal public posts }
  387.     normprivpost,                     { send normal e-mail }
  388.     anonpubread,                      { see who posted public anon }
  389.     anonprivread,                     { see who sent anon e-mail }
  390.     anonpubpost,                      { make anon posts }
  391.     anonprivpost,                     { send anon e-mail }
  392.     seeunval,                         { see unvalidated files }
  393.     dlunval,                          { DL unvalidated files }
  394.     nodlratio,                        { no UL/DL ratio }
  395.     nopostratio,                      { no post/call ratio }
  396.     nofilepts,                        { no file points checking }
  397.     ulvalreq,                         { uploads require validation }
  398.     junkola1,                         { -------------------------- }
  399.     overridechat:acstring;            { override chat hours }
  400.  
  401.     maxprivpost,                      { max email can send per call }
  402.     maxfback,                         { max feedback per call }
  403.     maxpubpost,                       { max posts per call }
  404.     maxchat,                          { max sysop pages per call }
  405.     maxwaiting,                       { max mail waiting }
  406.     csmaxwaiting,                     { max mail waiting for Co-SysOp + }
  407.     junk1,                            { ------------------------------- }
  408.     junk2,                            { ------------------------------- }
  409.     maxlogontries,                    { tries allowed for PW's at logon }
  410.     sysopcolor,                       { SysOp color in chat mode }
  411.     usercolor:byte;                   { user color in chat mode }
  412.     minspaceforpost,                  { minimum drive space left to post }
  413.     minspaceforupload:integer;        { minimum drive space left to upload }
  414.     backsysoplogs,                    { days to keep SYSOP##.LOG }
  415.     eventwarningtime,                 { minutes before event to warn user }
  416.     wfcblanktime:byte;                { minutes before blanking WFC menu }
  417.  
  418.     allowalias,                       { allow handles? }
  419.     phonepw,                          { phone number password in logon? }
  420.     localsec,                         { use local security? }
  421.     globaltrap,                       { trap everyone's activity? }
  422.     autochatopen,                     { automatically open chat buffer? }
  423.     autominlogon,                     { Auto-Message at logon? }
  424.     bullinlogon,                      { bulletins at logon? }
  425.     lcallinlogon,                     { "Last Few Callers" list at logon? }
  426.     yourinfoinlogon,                  { "Your Info" at logon? }
  427.     offhooklocallogon,                { phone off-hook for local logons? }
  428.     forcevoting,                      { manditory voting? }
  429.     compressbases,                    { "compress" file/msg base numbers? }
  430.     searchdup:boolean;                { search for dupes files when UL? }
  431.     slogtype:byte;                    { log type: File/Printer/Both }
  432.     stripclog:boolean;                { strip colors from SysOp log? }
  433.     newapp,                           { send new user application to # }
  434.     timeoutbell,                      { minutes before timeout beep }
  435.     timeout:integer;                  { minutes before timeout }
  436.     useems:boolean;                   { use EMS for overlay }
  437.     usebios:boolean;                  { use BIOS for video output }
  438.     cgasnow:boolean;                  { snow supression on }
  439.     alertbeep:integer;                { time between alert beeps }
  440.  
  441.     filearcinfo:
  442.         array[1..maxarcs] of filearcinforec;           { archive specs }
  443.     filearccomment:
  444.         array[1..3] of string[40];    { BBS comment files for archives }
  445.     uldlratio,                        { use UL/DL ratios? }
  446.     fileptratio:boolean;              { use auto file-pt compensation? }
  447.     fileptcomp,                       { file point compensation ratio }
  448.     fileptcompbasesize,               { file point base compensation size }
  449.     ulrefund,                         { percent of time to refund on ULs }
  450.     tosysopdir:byte;                  { SysOp file base }
  451.     validateallfiles:boolean;         { validate files automatically? }
  452.     maxintemp,                        { max K allowed in TEMP }
  453.     minresume:integer;                { min K to allow resume-later }
  454.  
  455.     filediz:boolean;                  { Search/Import file_id.diz }
  456.  
  457.     maxqwktotal,                      { max msgs in a packet, period }
  458.     maxqwkbase:word;                  { max msgs in a base }
  459.  
  460.     RES99:array[1..6] of byte;
  461.  
  462.     sysoppword:boolean;               { check for sysop password? }
  463.  
  464.     RES98:array[1..9] of byte;
  465.  
  466.     allstartmenu:string[8];           { logon menu to start users on }
  467.     bulletprefix:string[8];           { default bulletins filename }
  468.  
  469.     timeallow,                        { time allowance }
  470.     callallow,                        { call allowance }
  471.     dlratio,                          { # ULs/# DLs ratios }
  472.     dlkratio,                         { DLk/ULk ratios }
  473.     postratio,                        { posts per call ratio }
  474.     dloneday,                         { Max number of dload files in one day}
  475.     dlkoneday:secrange;               { Max k downloaded in one day}
  476.  
  477.     lastdate:string[8];               { last system date }
  478.     curwindow:byte;                   { type of SysOp window in use }
  479.     istopwindow:boolean;              { is window at top of screen? }
  480.     callernum:longint;                { system caller number }
  481.     numusers:integer;                 { number of users }
  482.  
  483.     junkola:array[1..45] of byte;     { -= NOT USED =- }
  484.  
  485.     rewardsystem:boolean;             { use file rewarding system? }
  486.  
  487.     passwordchange:word;              { change password at least every x days }
  488.  
  489.     netmailpath:string[40];           { path to netmail }
  490.     netmailacs:acstring;              { do they have access to netmail? }
  491.  
  492.     rewardratio:integer;              { % of file points to reward back }
  493.  
  494.     birthdatecheck:byte;              { check user's birthdate every xx logons }
  495.  
  496.     Invisible:acstring;                 { Invisible mode? }
  497.  
  498.     fileattachpath:string[40];        { directory for file attaches }
  499.  
  500.     fileattachacs:acstring;           { acs to attach files to messages }
  501.     changevote:acstring;              { acs to change their vote }
  502.  
  503.     trapgroup:boolean;                { record group chats? }
  504.  
  505.     qwktimeignore:boolean;            { ignore time remaining for qwk download? }
  506.  
  507.     networkmode:boolean;              { Network mode ? }
  508.  
  509.     SwapTo:byte;                      { Swap where?    }
  510.  
  511.     res:array[1..23] of byte;         { bleah }
  512.  
  513.     windowon:boolean;                 { is the sysop window on? }
  514.     regnumber:longint;                { registration number }
  515.  
  516.     chatcall:boolean;                 { Whether system keeps beeping after chat}
  517.  
  518.     packetname:string[8];             { QWK packet name }
  519.     qwkwelcome:string[50];            { QWK welcome file name }
  520.     qwknews:string[50];               { QWK news file name }
  521.     qwkgoodbye:string[50];            { QWK goodbye file name }
  522.     qwklocalpath:string[40];          { QWK path for local usage }
  523.  
  524.     dailylimits:boolean;              { Daily file limits on/off }
  525.     multinode:boolean;                { enable multinode support }
  526.     daysonline:word;                  { days online }
  527.     totalcalls:longint;               { incase different from callernum }
  528.     totalusage:longint;               { total usage in minutes }
  529.     totalposts:longint;               { total number of posts }
  530.     totaldloads:longint;              { total number of dloads }
  531.     totaluloads:longint;              { total number of uloads }
  532.  
  533.     percall:boolean;                  { time limits are per call or per day?}
  534.     testuploads:boolean;              { perform integrity tests on uploads? }
  535.     crap5:array[1..4] of string[160]; { sysop macros }
  536.  
  537.     validation:array['A'..'Z'] of
  538.                validationrec;         { Validation records A - Z }
  539.  
  540.     macro:array[0..9] of string[100]; { sysop macros }
  541.   end;
  542.  
  543.   smr=                            { SHORTMSG.DAT : One-line messages }
  544.   record
  545.     msg:astr;
  546.     destin:integer;
  547.   end;
  548.  
  549.   votingr=                        { VOTING.DAT : Voting records }
  550.   record
  551.     description:string[65];       { voting question }
  552.     acs:acstring;                 { acs required to vote on this }
  553.     choicenumber:word;            { number of choices }
  554.     numvoted:word;                { number of votes on it }
  555.     madeby:string[35];            { who created it }
  556.     addchoicesacs:acstring;       { acs required to add choices }
  557.     choices:array[1..25] of
  558.     record
  559.       description:string[65];     { answer description }
  560.       description2:string[65];    { answer description #2 }
  561.       numvoted:integer;           { # user's who picked this answer }
  562.     end;
  563.   end;
  564.  
  565.   mbflags=
  566.    (mbunhidden,                   { whether *VISIBLE* to users w/o access }
  567.     mbrealname,                   { whether real names are forced }
  568.     mbisdir,                      { if a message base directory }
  569.     mbinternet,                   { if internet message base }
  570.     mbfilter,                     { whether to filter ANSI/8-bit ASCII }
  571.     mbskludge,                    { strip IFNA kludge lines }
  572.     mbsseenby,                    { strip SEEN-BY lines }
  573.     mbsorigin,                    { strip origin lines }
  574.     mbprivate,                    { allow private messages }
  575.     mbforceread,                  { force the reading of this base }
  576.     junk3,
  577.     mbaddtear,                    { add tear/origin lines }
  578.     mbtopstar);                   { whether Top Star for GroupMail base }
  579.  
  580.   boardrec=                       { MBASES.DAT : Message base records }
  581.   record
  582.     name:string[40];              { message base description }
  583.     filename:string[8];           { HDR/DAT data filename }
  584.     msgpath:string[40];           { messages pathname   }
  585.     acs,                          { access requirement }
  586.     postacs,                      { post access requirement }
  587.     mciacs,                       { MCI usage requirement }
  588.     sysopacs:acstring;            { Message base sysop requirement }
  589.     maxmsgs:word;                 { max message count }
  590.     anonymous:anontyp;            { anonymous type }
  591.     password:string[20];          { base password }
  592.     mbstat:set of mbflags;        { message base status vars }
  593.     mbtype:integer;               { base type (0=Local,1=Echo,2=Group) }
  594.     origin:string[50];            { origin line }
  595.     text_color,                   { color of standard text }
  596.     quote_color,                  { color of quoted text }
  597.     tear_color,                   { color of tear line }
  598.     origin_color:byte;            { color of origin line }
  599.     aka:byte;                     { alternate address }
  600.     QWKIndex:word;                { QWK indexing number }
  601.     res:array[1..11] of byte;     { RESERVED }
  602.   end;
  603.  
  604.   fbflags=
  605.    (fbnoratio,                    { if <No Ratio> active }
  606.     fbunhidden,                   { whether *VISIBLE* to users w/o access }
  607.     fbdirdlpath,                  { if *.DIR file stored in DLPATH }
  608.     fbshowname,                   { show uploaders in listings }
  609.     fbusegifspecs,                { whether to use GifSpecs }
  610.     fbcdrom,                      { base is read only, no sorting or ul scanning }
  611.     fbshowdate);                  { show date uploaded in listings }
  612.  
  613.   ulrec=                          { FBASES.DAT  : File base records }
  614.   record
  615.     name:string[40];              { area description  }
  616.     filename:string[12];          { filename + ".DIR" }
  617.     dlpath,                       { download path     }
  618.     ulpath:string[40];            { upload path       }
  619.     maxfiles:word;                { max files allowed }
  620.     password:string[20];          { password required }
  621.     arctype,                      { wanted archive type (1..max,0=inactive) }
  622.     cmttype:byte;                 { wanted comment type (1..3,0=inactive) }
  623.     res1:integer;                 { not used }
  624.     fbstat:set of fbflags;        { file base status vars }
  625.     acs,                          { access requirements }
  626.     ulacs,                        { upload requirements }
  627.     dlacs:acstring;               { download requirements }
  628.     res:array[1..10] of byte;     { RESERVED }
  629.   end;
  630.  
  631.   filstat=
  632.    (notval,                       { if file is NOT validated }
  633.     isrequest,                    { if file is REQUEST }
  634.     resumelater,                  { if file is RESUME-LATER }
  635.     hatched);                     { has file been hatched? }
  636.  
  637.   ulfrec=                         { *.DIR : File records }
  638.   record
  639.     filename:string[12];          { Filename }
  640.     description:string[60];       { File description }
  641.     filepoints:integer;           { File points }
  642.     downloaded:word;              { Number DLs }
  643.     sizemod:byte;                 { # chars over last 128 byte block }
  644.     blocks:word;                  { # 128 byte blks }
  645.     owner:word;                   { ULer of file }
  646.     stowner:string[36];           { ULer's name }
  647.     date:string[8];               { Date ULed }
  648.     daten:word;                   { Numeric date ULed }
  649.     vpointer:longint;             { Pointer to verbose descr, -1 if none }
  650.     filestat:set of filstat;      { File status }
  651.     res:array[1..10] of byte;     { RESERVED }
  652.   end;
  653.  
  654.   verbrec=                        { EXTENDED.DAT: Extendeddescriptions }
  655.   record
  656.     descr:array[1..4] of string[50];
  657.   end;
  658.  
  659.   lcallers=                       { LASTON.DAT : Last few callers records }
  660.   record
  661.     callernum:longint;            { system caller number }
  662.     name:string[36];              { user name of caller }
  663.     number:word;                  { user number of caller }
  664.     citystate:string[30];         { city/state of caller }
  665.     baud:string[5];               { baud of caller }
  666.     timeon:string[8];             { time logged on }
  667.     daynum:word;                  { day num logged on }
  668.     wasnew:boolean;               { was it a new user? }
  669.   end;
  670.  
  671.   eventrec=                       { EVENTS.DAT : Event records }
  672.   record
  673.     active:boolean;               { whether active }
  674.     description:string[30];       { event description }
  675.     etype:char;                   { ACS,Chat,Dos,External,Pack Msgs,Sort Files }
  676.     execdata:string[20];          { errorlevel if "E", commandline if "D" }
  677.     softevent,                    { event runs whenever "convenient" }
  678.     missed,                       { run even even if missed }
  679.     monthly,                      { monthly event? }
  680.     busyduring:boolean;           { busy phone DURING event? }
  681.     exectime,                     { time of execution }
  682.     durationorlastday:integer;    { length of time event takes }
  683.     offhooktime,                  { off-hook time before; 0 if none }
  684.     Enode,                        { node number to execute on (0 = all) }
  685.     execdays:byte;                { bitwise execution days or day of month if monthly }
  686.   end;
  687.  
  688.   mnuflags=
  689.    (clrscrbefore,                 { C: clear screen before menu display }
  690.     dontcenter,                   { D: don't center the menu titles! }
  691.     nomenuprompt,                 { N: no menu prompt whatsoever? }
  692.     forcepause,                   { P: force a pause before menu display? }
  693.     autotime,                     { T: is time displayed automatically? }
  694.     forceline);                   { F: Force full line input }
  695.  
  696.   menurec=                        { *.MNU : Menu records }
  697.   record
  698.     menuname:array[1..3] of string[100]; { menu name }
  699.     directive,                           { help file displayed }
  700.     longmenu:string[12];                 { displayed in place of long menu }
  701.     menuprompt:string[120];              { menu prompt }
  702.     acs:acstring;                        { access requirements }
  703.     password:string[15];                 { password required }
  704.     fallback:string[8];                  { fallback menu }
  705.     forcehelplevel:byte;                 { forced help level for menu }
  706.     gencols:byte;                        { generic menus: # of columns }
  707.     gcol:array[1..3] of byte;            { generic menus: colors }
  708.     menuflags:set of mnuflags;           { menu status variables }
  709.   end;
  710.  
  711.   cmdflags=
  712.    (hidden,                       { H: is command ALWAYS hidden? }
  713.     unhidden);                    { U: is command ALWAYS visible? }
  714.  
  715.   commandrec=                       { *.MNU : Command records }
  716.   record
  717.     ldesc:string[70];               { long command description }
  718.     sdesc:string[35];               { short command description }
  719.     ckeys:string[14];               { command-execution keys }
  720.     acs:acstring;                   { access requirements }
  721.     cmdkeys:string[2];              { command keys: type of command }
  722.     options:string[50];             { MString: command data }
  723.     commandflags:set of cmdflags;   { command status variables }
  724.   end;
  725.  
  726.   xbflags=
  727.    (xbactive,
  728.     xbisbatch,
  729.     xbisresume,
  730.     xbxferokcode,
  731.     xbbidirectional);
  732.  
  733.   protrec=                          { PROTOCOL.DAT records }
  734.   record
  735.     xbstat:set of xbflags;                       { protocol flags }
  736.     ckeys:string[14];                            { command keys }
  737.     descr:string[40];                            { description }
  738.     acs:acstring;                                { access string }
  739.     templog:string[25];                          { temp. log file }
  740.     uloadlog,dloadlog:string[25];                { permanent log files }
  741.     ulcmd,dlcmd:string[78];                      { UL/DL commandlines }
  742.     ulcode,dlcode:array [1..6] of string[6];     { UL/DL codes }
  743.     envcmd:string[60];                           { environment setup cmd }
  744.     dlflist:string[25];                          { DL file lists }
  745.     maxchrs:integer;                             { max chrs in cmdline }
  746.     logpf,logps:integer;                         { pos in log file for data }
  747.     res:array[1..15] of byte;                    { RESERVED }
  748.   end;
  749.  
  750.  
  751.   networkrec=                          { NETWORK.DAT : Net Iformation }
  752.   record
  753.     nres:array[1..8] of byte;
  754.     origin:string[50];              { origin line }
  755.     text_color:byte;                { color of standard text }
  756.     quote_color:byte;               { color of quoted text }
  757.     tear_color:byte;                { color of tear line }
  758.     origin_color:byte;              { color of origin line }
  759.     skludge:boolean;                { strip kludge lines? }
  760.     sseenby:boolean;                { strip SEEN-BY lines? }
  761.     sorigin:boolean;                { strip origin line? }
  762.     netattribute:NetAttribs;        { default netmail attribute }
  763.     res:byte;
  764.     addtear:boolean;                { add tear/origin lines? }
  765.     defechopath:string[40];         { default echomail path }
  766.     defgrouppath:string[40];        { default groupmail path }
  767.     aka:array[0..9] of record     { 10 akas }
  768.       zone,
  769.       net,
  770.       node,
  771.       point:word;
  772.     end;
  773.   end;
  774.  
  775.   confrec=            { CONFRENC.DAT : Conference data }
  776.   record
  777.     conference:array['@'..'Z'] of
  778.     record
  779.       acs:acstring;       { access requirement }
  780.       name:string[40];    { name of conference }
  781.     end;
  782.   end;
  783.  
  784.   nodeflags=
  785.     (NActive,                 { Is this node active?               }
  786.      NAvail,                  { Is this node's user available?     }
  787.      NUpdate,                 { This node should re-read it's user }
  788.      NHangup,                 { Hangup on this node                }
  789.      NRecycle,                { Recycle this node to the OS        }
  790.      NInvisible);             { This node is Invisible             }
  791.  
  792.   noderec=                         { MULTNODE.DAT }
  793.     record
  794.       User:word;                                 { What user number     }
  795.       Activity:byte;                             { What are they doing? }
  796.       Status:set of nodeflags;
  797.       Room:byte;                                 { What room are they in?      }
  798.       Invited:array[0..31] of set of 0..7;       { Have they been invited ?    }
  799.       Booted:array[0..31] of set of 0..7;        { Have they been kicked off ? }
  800.       Forget:array[0..31] of set of 0..7;        { Who are they forgetting?    }
  801.     end;
  802.  
  803.   RoomRec=                         { ROOM.DAT }
  804.     record
  805.       Topic:string[40];            { Set by a /T or something    }
  806.       Anonymous:boolean;           { Is Room anonymous ?         }
  807.       Private:boolean;             { Is Room private ?           }
  808.       Moderator:word;              { Who's the moderator?        }
  809.       People:byte;                 { Number of people in Room    }
  810.     end;
  811.  
  812.   scanrec=                         { *.SCN files }
  813.     record
  814.       NewScan:boolean;             { Scan this base? }
  815.       LastRead:longint;            { Last date read  }
  816.     end;
  817.  
  818.   SchemeRec=                       { Scheme.dat }
  819.     record
  820.       Description:string[30];       { Description of the color scheme }
  821.       Color:array[1..200] of byte;  { Colors in scheme }
  822.     end;
  823.  
  824.